//#include<iostream>
//#include<vector>
//#include<algorithm>
//#include<queue>
//using namespace std;
//
//using  ll = long long;
//const int N = 1e5 + 9;
//const ll  inf = 2e18;
//vector<int> g[N];
//ll ind[N], n, m;
//vector<int> ans;
//
//void topo()
//{
//	priority_queue<int,vector<int>,greater<int>> pq;
//	for (int i = 1; i <= n; ++i)if (ind[i] == 0)pq.push(i);
//	while (pq.size() ){
//		int x = pq.top(); pq.pop();
//		ans.push_back(x);
//		for (int y : g[x]) {
//			ind[y]--;
//			if (ind[y] == 0)pq.push(y);
//		}
//	}
//
//}
//
//void solve()
//{
//	cin >> n >> m;
//	for (int i = 1; i <= m; ++i) {
//		int x, y; cin >> x >> y;
//		ind[y]++;
//		g[x].push_back(y);
//
//	}
//	topo();
//	for (int i = 1; i <= n; ++i) {
//		if (ind[i]) {
//			cout << -1 << '\n';
//			return;
//		}
//	}
//	for (const auto& x : ans)cout << x << ' ';
//	cout << '\n';
//
//}
//
//int main()
//{
//	ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
//	int _ = 1;
//	while (_--)solve();
//
//
//
//	return 0;
//}
//87%WA

//100%AC
//#include<iostream>
//#include<vector>
//#include<algorithm>
//#include<queue>
//using namespace std;
//
//using  ll = long long;
//const int N = 1e5 + 9;
//const ll  inf = 2e18;
//vector<int> g[N];
//ll ind[N], n, m;
//vector<int> ans;
//
//void topo()
//{
//	priority_queue<int,vector<int>,greater<int>> pq;
//	for (int i = 1; i <= n; ++i)if (ind[i] == 0)pq.push(i);
//	while (pq.size() ){
//		int x = pq.top(); pq.pop();
//		ans.push_back(x);
//		for (int y : g[x]) {
//			ind[y]--;
//			if (ind[y] == 0)pq.push(y);
//		}
//	}
//
//}
//
//void solve()
//{
//	cin >> n >> m;
//	for (int i = 1; i <= m; ++i) {
//		int x, y; cin >> x >> y;
//		ind[y]++;
//		g[x].push_back(y);
//
//	}
//	topo();
//	if ((int)ans.size() < n) {
//		cout << -1 << '\n';
//
//	}
//	else {
//		for (const auto& x : ans)cout << x << ' ';
//		cout << '\n';
//	}
//
//}
//
//int main()
//{
//	ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
//	int _ = 1;
//	while (_--)solve();
//
//
//
//	return 0;
//}



//#include<iostream>
//#include<vector>
//#include<algorithm>
//#include<queue>
//using namespace std;
//
//using  ll = long long;
//const int N = 1e5 + 9;
//const ll  inf = 2e18;
//vector<int> g[N];
//ll ind[N], n, m, a[N],f[N];
//vector<int> ans;
//
//void topo()
//{
//	queue<int> q;
//	for (int i = 1; i <= n; ++i) 
//	{
//		if (ind[i] == 0)
//		{
//			f[i] = a[i];
//			q.push(i);
//		}
//	}
//	while (q.size()) {
//		int x = q.front(); q.pop();
//		for (int y : g[x]) {
//			f[y] = max(f[y], f[x] + a[y]);
//			if (--ind[y] == 0)q.push(y);
//		}
//
//	}
//}
//void solve()
//{
//	cin >> n >> m;
//	for (int i = 1; i <= n; ++i)cin >> a[i];
//	for (int i = 1; i <= n; ++i) {
//		int x, y; cin >> x >> y;
//		ind[y]++;
//		g[x].push_back(y);
//	}
//	topo();
//	ll ans = f[1];
//	for (int i = 2; i <= n; ++i)ans = max(ans, f[i]);
//	cout << ans << '\n';
//}
//
//int main()
//{
//	ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
//	int _ = 1;
//	while (_--)solve();
//
//
//
//	return 0;
//}

#include<iostream>
#include<vector>
#include<algorithm>
#include<queue>
#include<bitset>
using namespace std;

using  ll = long long;
const int N = 1e4;
const ll  inf = 2e18;
vector<int> g[N];
ll ind[N], n, m, a[N];
bitset<N> f[N];
vector<int> ans;

void topo()
{
	queue<int> q;
	for (int i = 1; i <= n; ++i) {
		f[i][i] = true;
		if(ind[i] == 0)q.push(i);

	}
	while (q.size())
	{
		int x = q.front(); q.pop();
		for (const auto& y : g[x]) {
			f[y] |= f[x];
			if (--ind[y] == 0)q.push(y);
		}
	}
}
int main()
{
	ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
	cin >> n >> m;
	for (int i = 1; i <= m; ++i)
	{
		int x, y; cin >> x >> y;
		g[x].push_back(y);
		ind[y]++;

	}
	topo();
	for (int i = 1; i <= n; ++i) {
		int cnt = 0;
		for (int j = 1; j <= n; ++j)if (f[j][i])cnt++;
		cout << cnt << ' ';
	}


	return 0;
}